Fun with Array methods
List of inventors
[
  {
    "first": "Albert",
    "last": "Einstein",
    "year": 1879,
    "passed": 1955
  },
  {
    "first": "Isaac",
    "last": "Newton",
    "year": 1643,
    "passed": 1727
  },
  {
    "first": "Galileo",
    "last": "Galilei",
    "year": 1564,
    "passed": 1642
  },
  {
    "first": "Marie",
    "last": "Curie",
    "year": 1867,
    "passed": 1934
  },
  {
    "first": "Johannes",
    "last": "Kepler",
    "year": 1571,
    "passed": 1630
  },
  {
    "first": "Nicolaus",
    "last": "Copernicus",
    "year": 1473,
    "passed": 1543
  },
  {
    "first": "Max",
    "last": "Planck",
    "year": 1858,
    "passed": 1947
  },
  {
    "first": "Katherine",
    "last": "Blodgett",
    "year": 1898,
    "passed": 1979
  },
  {
    "first": "Ada",
    "last": "Lovelace",
    "year": 1815,
    "passed": 1852
  },
  {
    "first": "Sarah E.",
    "last": "Goode",
    "year": 1855,
    "passed": 1905
  },
  {
    "first": "Lise",
    "last": "Meitner",
    "year": 1878,
    "passed": 1968
  },
  {
    "first": "Hanna",
    "last": "Hammarström",
    "year": 1829,
    "passed": 1909
  }
]
List of people
[
  "Bernhard, Sandra",
  "Bethea, Erin",
  "Becker, Carl",
  "Bentsen, Lloyd",
  "Beckett, Samuel",
  "Blake, William",
  "Berger, Ric",
  "Beddoes, Mick",
  "Beethoven, Ludwig",
  "Belloc, Hilaire",
  "Begin, Menachem",
  "Bellow, Saul",
  "Benchley, Robert",
  "Blair, Robert",
  "Benenson, Peter",
  "Benjamin, Walter",
  "Berlin, Irving",
  "Benn, Tony",
  "Benson, Leana",
  "Bent, Silas",
  "Berle, Milton",
  "Berry, Halle",
  "Biko, Steve",
  "Beck, Glenn",
  "Bergman, Ingmar",
  "Black, Elk",
  "Berio, Luciano",
  "Berne, Eric",
  "Berra, Yogi",
  "Berry, Wendell",
  "Bevan, Aneurin",
  "Ben-Gurion, David",
  "Bevel, Ken",
  "Biden, Joseph",
  "Bennington, Chester",
  "Bierce, Ambrose",
  "Billings, Josh",
  "Birrell, Augustine",
  "Blair, Tony",
  "Beecher, Henry",
  "Biondo, Frank"
]
List of Boulevards
[
  "Boulevards of Paris",
  "City walls of Paris",
  "Thiers wall",
  "Wall of Charles V",
  "Wall of Philip II Augustus",
  "City gates of Paris",
  "Haussmann's renovation of Paris",
  "Boulevards of the Marshals",
  "Boulevard Auguste-Blanqui",
  "Boulevard Barbès",
  "Boulevard Beaumarchais",
  "Boulevard de l'Amiral-Bruix",
  "Boulevard Mortier",
  "Boulevard Poniatowski",
  "Boulevard Soult",
  "Boulevard des Capucines",
  "Boulevard de la Chapelle",
  "Boulevard de Clichy",
  "Boulevard du Crime",
  "Boulevard du Général-d'Armée-Jean-Simon",
  "Boulevard Haussmann",
  "Boulevard de l'Hôpital",
  "Boulevard des Italiens",
  "Boulevard Lefebvre",
  "Boulevard de la Madeleine",
  "Boulevard de Magenta",
  "Boulevard Malesherbes",
  "Boulevard Marguerite-de-Rochechouart",
  "Boulevard Montmartre",
  "Boulevard du Montparnasse",
  "Boulevard Raspail",
  "Boulevard Richard-Lenoir",
  "Boulevard Saint-Germain",
  "Boulevard Saint-Michel",
  "Boulevard de Sébastopol",
  "Boulevard de Strasbourg",
  "Boulevard du Temple",
  "Boulevard Voltaire",
  "Boulevard de la Zone"
]
List of vehicle types
[
  "car",
  "car",
  "truck",
  "truck",
  "bike",
  "walk",
  "car",
  "van",
  "bike",
  "walk",
  "car",
  "van",
  "car",
  "truck"
]
1. Filter the list of inventors for those who were born in the 1500's
[
  {
    "first": "Galileo",
    "last": "Galilei",
    "year": 1564,
    "passed": 1642
  },
  {
    "first": "Johannes",
    "last": "Kepler",
    "year": 1571,
    "passed": 1630
  }
]
2. Give us an array of the inventors first and last names
[
  "Albert Einstein",
  "Isaac Newton",
  "Galileo Galilei",
  "Marie Curie",
  "Johannes Kepler",
  "Nicolaus Copernicus",
  "Max Planck",
  "Katherine Blodgett",
  "Ada Lovelace",
  "Sarah E. Goode",
  "Lise Meitner",
  "Hanna Hammarström"
]
3. Sort the inventors by birthdate, oldest to youngest
[
  {
    "first": "Katherine",
    "last": "Blodgett",
    "year": 1898,
    "passed": 1979
  },
  {
    "first": "Albert",
    "last": "Einstein",
    "year": 1879,
    "passed": 1955
  },
  {
    "first": "Lise",
    "last": "Meitner",
    "year": 1878,
    "passed": 1968
  },
  {
    "first": "Marie",
    "last": "Curie",
    "year": 1867,
    "passed": 1934
  },
  {
    "first": "Max",
    "last": "Planck",
    "year": 1858,
    "passed": 1947
  },
  {
    "first": "Sarah E.",
    "last": "Goode",
    "year": 1855,
    "passed": 1905
  },
  {
    "first": "Hanna",
    "last": "Hammarström",
    "year": 1829,
    "passed": 1909
  },
  {
    "first": "Ada",
    "last": "Lovelace",
    "year": 1815,
    "passed": 1852
  },
  {
    "first": "Isaac",
    "last": "Newton",
    "year": 1643,
    "passed": 1727
  },
  {
    "first": "Johannes",
    "last": "Kepler",
    "year": 1571,
    "passed": 1630
  },
  {
    "first": "Galileo",
    "last": "Galilei",
    "year": 1564,
    "passed": 1642
  },
  {
    "first": "Nicolaus",
    "last": "Copernicus",
    "year": 1473,
    "passed": 1543
  }
]
4. How many years did all the inventors live all together?
861
5. Sort the inventors by years lived
[
  {
    "first": "Ada",
    "last": "Lovelace",
    "year": 1815,
    "passed": 1852
  },
  {
    "first": "Sarah E.",
    "last": "Goode",
    "year": 1855,
    "passed": 1905
  },
  {
    "first": "Johannes",
    "last": "Kepler",
    "year": 1571,
    "passed": 1630
  },
  {
    "first": "Marie",
    "last": "Curie",
    "year": 1867,
    "passed": 1934
  },
  {
    "first": "Nicolaus",
    "last": "Copernicus",
    "year": 1473,
    "passed": 1543
  },
  {
    "first": "Albert",
    "last": "Einstein",
    "year": 1879,
    "passed": 1955
  },
  {
    "first": "Galileo",
    "last": "Galilei",
    "year": 1564,
    "passed": 1642
  },
  {
    "first": "Hanna",
    "last": "Hammarström",
    "year": 1829,
    "passed": 1909
  },
  {
    "first": "Katherine",
    "last": "Blodgett",
    "year": 1898,
    "passed": 1979
  },
  {
    "first": "Isaac",
    "last": "Newton",
    "year": 1643,
    "passed": 1727
  },
  {
    "first": "Max",
    "last": "Planck",
    "year": 1858,
    "passed": 1947
  },
  {
    "first": "Lise",
    "last": "Meitner",
    "year": 1878,
    "passed": 1968
  }
]
6. Create a list of Boulevards in Paris that contain 'de' anywhere in the name
[
  "Boulevard de l'Amiral-Bruix",
  "Boulevard des Capucines",
  "Boulevard de la Chapelle",
  "Boulevard de Clichy",
  "Boulevard de l'Hôpital",
  "Boulevard des Italiens",
  "Boulevard de la Madeleine",
  "Boulevard de Magenta",
  "Boulevard Marguerite-de-Rochechouart",
  "Boulevard de Sébastopol",
  "Boulevard de Strasbourg",
  "Boulevard de la Zone"
]
7. Sort the people alphabetically by last name
[
  "Bierce, Ambrose",
  "Bevan, Aneurin",
  "Birrell, Augustine",
  "Becker, Carl",
  "Bennington, Chester",
  "Ben-Gurion, David",
  "Black, Elk",
  "Berne, Eric",
  "Bethea, Erin",
  "Biondo, Frank",
  "Beck, Glenn",
  "Berry, Halle",
  "Beecher, Henry",
  "Belloc, Hilaire",
  "Bergman, Ingmar",
  "Berlin, Irving",
  "Biden, Joseph",
  "Billings, Josh",
  "Bevel, Ken",
  "Benson, Leana",
  "Bentsen, Lloyd",
  "Berio, Luciano",
  "Beethoven, Ludwig",
  "Begin, Menachem",
  "Beddoes, Mick",
  "Berle, Milton",
  "Benenson, Peter",
  "Berger, Ric",
  "Benchley, Robert",
  "Blair, Robert",
  "Beckett, Samuel",
  "Bernhard, Sandra",
  "Bellow, Saul",
  "Bent, Silas",
  "Biko, Steve",
  "Benn, Tony",
  "Blair, Tony",
  "Benjamin, Walter",
  "Berry, Wendell",
  "Blake, William",
  "Berra, Yogi"
]
8. Frequency of each vehicle type in the list
{
  "car": 5,
  "truck": 3,
  "bike": 2,
  "walk": 2,
  "van": 2
}
Created own map()
"function ourMap(callbackFn) {
  const output = [];
  for (let i = 0; i < this.length; i++) {
    const curr = this[i];
    output.push(callbackFn(curr));
  }
  return output;
}"
Created own filter()
"function ourFilter(callbackFn) {
  const filtered = [];
  for (let i = 0; i < this.length; i++) {
    const curr = this[i];
    const ans = callbackFn(curr);
    if (ans) {
      filtered.push(curr);
    }
  }
  return filtered;
}"
Created own reduce()
"function ourReduce(callbackFn, obj) {
  for (let i = 0; i < this.length; i++) {
    const curr = this[i];
    obj = callbackFn(obj, curr);
  }
  return obj;
}"
Created own sort()
"function ourSort(callbackFn) {
  if (callbackFn == undefined) {
    callbackFn = defaultCompare;
  }
  if (this.length <= 1) {
    return this;
  }
  const mid = this.length / 2;
  const left = this.slice(0, mid);
  const right = this.slice(mid);
  return merge(left.ourSort(callbackFn), right.ourSort(callbackFn), callbackFn);
}

function defaultCompare(a, b) {
  return a.toString().localeCompare(b.toString());
}

function merge(left, right, callbackFn) {
  let idx1 = 0;
  let idx2 = 0;
  const out = [];
  while (idx1 < left.length && idx2 < right.length) {
    if (callbackFn(left[idx1], right[idx2]) < 0) {
      out.push(left[idx1]);
      idx1++;
    } else {
      out.push(right[idx2]);
      idx2++;
    }
  }
  while (idx1 < left.length) {
    out.push(left[idx1++]);
  }
  while (idx2 < right.length) {
    out.push(right[idx2++]);
  }
  return out;
}"